package solution;

class Solution {
    public static int[] productExceptSelf(int[] nums) {
        int len = nums.length;

        int[] dp1 = new int[len + 1]; //前缀积
        int[] dp2 = new int[len + 1]; //后缀积

        dp1[0] = 1;
        dp2[0] = 1;

        for (int i = 1; i < len + 1; i++) {
            dp1[i] = dp1[i - 1] * nums[i - 1];
            dp2[i] = dp2[i - 1] * nums[len - i];
        }

        int[] ret = new int[len];
        for (int i = 0; i < len; i++) {
            ret[i] = dp1[i] * dp2[len - i - 1];
        }

        return ret;
    }

    public static void main(String[] args) {
        productExceptSelf(new int[]{1, 2, 3, 4});
    }
}

//class Solution {
//    public int[] productExceptSelf(int[] nums) {
//
//        int len = nums.length;
//
//        int product = 1;
//        int product1 = 1; //除去 0 的成绩，若有多个 0，就为 0
//        int zeroCount = 0;
//        for (int num : nums) {
//            product *= num;
//            if (zeroCount <= 1) {
//                if (num == 0) {
//                    zeroCount++;
//                } else {
//                    product1 *= num;
//                }
//            }
//        }
//
//        int[] result = new int[len];
//
//        if (zeroCount > 1) {
//            return result;
//        }
//
//        for (int i = 0; i < len; i++) {
//            if (zeroCount == 1) {
//                //只有一个 0
//                if (nums[i] == 0) {
//                    result[i] = product1;
//                }
//            } else {
//                //没有0
//                result[i] = product / nums[i];
//            }
//        }
//
//        return result;
//    }
//}